package coder.config;

import coder.interceptor.LoginInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.ArrayList;
import java.util.List;

@Configuration
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Value("${spring.mvc.servlet.path}")
    private String prefix;

    @Value("${file.uploadDir}")
    private String uploadDir;
    /**
     * 添加资源处理器
     *
     * 该方法用于向ResourceHandlerRegistry注册资源处理器，以处理静态资源请求
     * 通过重写此方法，可以自定义资源处理器的配置，从而影响静态资源如何被访问
     *
     * @param registry 资源处理器注册器，用于注册资源处理器
     *   通过这个参数，可以配置和管理应用中的静态资源访问路径
     */

    // 注入登录拦截器
    @Autowired
    private LoginInterceptor loginInterceptor;
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("自定义静态资源处理器.....");
        registry.addResourceHandler( "/images/**")
                .addResourceLocations("file:" + uploadDir);
        super.addResourceHandlers(registry);
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 白名单
        List<String> patterns = new ArrayList<>();
        // 添加需要放行的路径，即登录路径
        patterns.add("/user/login");
        patterns.add("/user/register");
        // 注册登录拦截器，对所有路径进行拦截，但排除白名单中的路径
        log.info("注册登录拦截器.....,不要拦截的请求{}",patterns);
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns(patterns);
    }
}
